import type { LoginOutDto } from '../../dto/login/loginDto.ts'
import type { User } from './type.ts'
import { dataMapper } from '../../src/utils/tools.ts'

function createUserList(): User[] {
  return [
    {
      userId: 1,
      avatar: 'src/assets/images/profile.jpg',
      username: 'admin',
      password: '123456',
      desc: '平台管理员',
      roles: ['平台管理员'],
      buttons: ['cuser.detail'],
      routes: ['home'],
      token: 'Admin Token',
    },
    {
      userId: 2,
      avatar:
        'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
      username: 'system',
      password: '123456',
      desc: '系统管理员',
      roles: ['系统管理员'],
      buttons: ['cuser.detail', 'cuser.user'],
      routes: ['home'],
      token: 'System Token',
    },
  ]
}

export default [
  // 用户登录接口
  {
    url: '/api/user/login', //请求地址
    method: 'post', //请求方式
    response: ({ body }) => {
      //获取请求体携带过来的用户名与密码
      const { username, password } = body
      //调用获取用户信息函数,用于判断是否有此用户
      const checkUser: User | undefined = createUserList().find(
        (item) => item.username === username && item.password === password,
      )

      //没有用户返回失败信息
      if (!checkUser) {
        return {
          code: 201,
          message: '账号或者密码不正确',
          ok: false,
          data: null,
        }
      }
      //如果有返回成功信息
      return {
        code: 200,
        message: null,
        ok: true,
        data: { token: checkUser.token },
      }
    },
  },

  // 获取用户信息
  {
    url: '/api/user/info',
    method: 'get',
    response: (request) => {
      //获取请求头携带token
      const token = request.headers.token
      //查看用户信息是否包含有次token用户
      const checkUser: User | undefined = createUserList().find(
        (item) => item.token === token,
      )

      //获取过滤的用户信息
      const result: LoginOutDto | undefined = dataMapper(checkUser)

      //没有返回失败的信息
      if (!checkUser) {
        return { code: 201, message: '获取用户信息失败', ok: false, data: null }
      }
      //如果有返回成功信息
      return { code: 200, message: null, ok: true, data: result }
    },
  },
]
